Golang常用包有哪些?

您所在的位置:网站首页 golang func Golang常用包有哪些?

Golang常用包有哪些?

2023-03-24 21:31| 来源: 网络整理| 查看: 265

不建议采用通读的方式来学习,通读包文档,是在太过无聊了,敲几个例子,粗略了解一下就好了。

如果想深入,还是具体想些案例,以实践方式学习比较实在一点,没有思路的话,可以试着去网上找找别人的最佳实践。

回归正题吧!

说到常用包,我觉得,可以从使用层面来考虑下,分类列举会比较好。问题中未指明类别,我就随便说说吧。

数据处理

数据处理对于不同数据类型有不同的处理方式,比如常见数值型的数学运算、字符串处理、底层的

数学运算

常见的数学运算,比如加、减、乘、除、取模都是内置的,但有些复杂的计算需要依赖库实现。

math,数学库,各种复杂的数学运算,比如三角函数、对数、幂运算等,文档地址pkg/math/。

go-num,类似 Python 的 numpy,Go 中数据科学的基础软件包,文档 gonum/gonum。

字符串处理

主要是 strings 包,提供了各种字符串操作处理的函数。其中的方法很多,不用一次都记住,用的时候看看就行了。

关于文档,你可以去看官方的,文档地址如下:

当然,你也可以在网上找一些博客。如下面这篇,简单直接,基本把每种方法的使用都列了出来。

除了 strings,还有一个包和字符串操作的关系比较大,那就是 strconv,从包名就能了解,它是做字符串和其他类型数据的转换的,即 string convert。

官方文档地址如下:

从其中,你可以找到怎么把字符串转化为 bool、int、float 的方法,也可以找到怎么把这些类型转化为字符串。如果涉及到进制转化,strconv 中也有相应的函数。

数据结构

常见的有数组、切片、映射、链表、堆、集合等,对应的包有:

数组、切片、映射,都是系统内置,看 Go 的 builtin 包文档 pkg/builtin/ 即可,除此以外,还有些博客文章可以看看。如下是两篇来自官方的文档:

链表、堆等数据结构由标准库提供,文档地址 pkg/container/。提供了三种数据结构,分别是双向链表、环形链表和堆。

集合,Go 中没有提供,但有几个第三方包可以使用,可以去看看我最近写的一篇文章,顺便简单介绍了 Go 中如何自己实现 set。

文章中提供了 4 个别人开发的 Go 的 set 实现。

二进制

二进制数据,个人感觉,一般都是用在数据传输上,或者一些对性能要求比较高的场景,比如前面提到的 set,它的实现也可以实现二进制实现。节省存储空间的同时,也提高了性能。

Go 中关于二进制处理的包是 binary,从名字就能看看出来。比如网络数据传输中常见的大小端的问题,[]byte 转 int 的方法,在 binary 中都能找到一些解决方案。

官方文档地址如下:

之前知乎上回答过相关问题,链接贴在下面:

缓冲 io

在写 Go 代码时,为了提高 IO 写入读取的性能,常常会使用一个包,即 bufio,如其名,主要是用 IO 读取写入的缓冲,

官方文档地址,如下:

一个简单写入的例子。

package main import ( "bufio" "fmt" ) type Writer int func (*Writer) Write(p []byte) (n int, err error) { fmt.Printf("Write: %q\n", p) return len(p), nil } func main() { w := new(Writer) bw := bufio.NewWriterSize(w, 3) _, _ = bw.Write([]byte{'a'}) _, _ = bw.Write([]byte{'b'}) _, _ = bw.Write([]byte{'c'}) _, _ = bw.Write([]byte{'d'}) _ = bw.Flush() }

写入超过指定数量,才会真正执行底层的写入动作。读取 read 的效果类似。

推荐一篇英文文章,对 bufio 的介绍不错,地址如下:

数据库

我理解主要分为两大类,即底层驱动类的包和上层的 ORM 包。

关于数据库的底层驱动,我大概了解了下,Go 官方没有提供具体的实现,只提供了接口定义 database 包,而驱动是由第三方实现。database 的文档地址:

我主要用的 MySQL,其他并没有怎么了解。其相应的地址如下:

Go 的 orm,常用的 gorm、beego orm、xorm、sqlx 等等。我现在用的 gorm,原因到没有怎么去想,因为 Go 的学习暂时还只有三个月,没那么多时间去思考这些问题,以后可以再来对比。

gorm 文档:

github 地址:

网络

Go 相比于其他很多语言,自带了 http 实现,即 net/http 包,包含了客户端和服务端的实现。

官方文档地址如下:

比如,实现一个简单的 HTTP 服务,只需要几行代码,如下:

package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Welcome to my website!") }) fs := http.FileServer(http.Dir("static/")) http.Handle("/static/", http.StripPrefix("/static/", fs)) http.ListenAndServe(":80", nil) }

如果你对性能的要求比较高,希望提升原生的 http 库性能,还有第三方开发了一个高性能的 http 库,名为 fasthttp,关于它如何做到提升,之前看到一个问题,链接如下:

其中一点就是,它通过 slice 可实现了内存复用,gc 的次数非常少;

客户端部分,之前也做了一些研究,并写了一篇关于它的使用教程,地址如下:

使用 HTTP 请求,或许还是爬虫场景用的较多吧。

网络包下面还有关于 socket、rpc 等包,也是非常常用的功能,有兴趣可以看看。

其他

不扯了,这种事情是扯不完了。什么是常用包,主要取决于你在做什么领域的事情。但是一些基础库,无论做什么基本都会用到。库是很多的,学习的话,一个方向了解一两个应该就差不多了。

补充:

对了,忘了贴这个万能大法 awesome-go 了。它是什么?自己去看吧!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3